package wenjun.du.androidart.component

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_component.*
import wenjun.du.androidart.MainActivity
import wenjun.du.androidart.R

/**
 * Android四大组件的启动流程分析：
 * 了解四大组件主体流程，不需要深入了解细节，重在理解整体框架
 *
 * App启动的入口：ActivityThread的main方法 其中开启了主线程的消息循环 并且将ApplicationThread传递到了AMS中，建立的跨进程链接
 *
 * Activity: 启动开始startActivity -... IPC之后到AMS中，接着启动流程，之后调回到ApplicationThread中：EXECUTE_TRANSACTION-...handleLaunchActivity-performLaunchActivity 正式启动activity
 *
 * Service: ContextImpl.startService()-AMS 回调到ApplicationThread中 scheduleCreateService(创建service 调用service的onCreate方法) scheduleServiceArgs(调用service的onStartCommand)
 *
 * 类似的：绑定服务流程类似  不同的是在ApplicationThread中会调用handleBindService方法；
 *
 * BroadCast: 跨进程的流程 观察者和被观察者的过程
 *
 * ContentProvider:
 *
 * ActivityThread的attach方法-AMS bindApplication方法 开始创建application 创建ContentProvider(installContentProviders)
 *
 * Application的创建和onCreate方法的调用
 *
 * */
class ComponentActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_component)
        activity.setOnClickListener {
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }

        service.setOnClickListener {
            val intent = Intent(this, MainActivity::class.java) // 仅仅只是为了查看代码方便
            startService(intent)  //mBase对象是ContextImpl
        }
    }
}